const app = getApp()
const auth = require('../../utils/auth')
const { get, post } = require('../../utils/request')

Page({
  data: {
    userInfo: null,
    hasUserInfo: false,
    userRole: '',
    menuList: [
      {
        id: 1,
        title: '我的地址',
        icon: '/assets/images/icons/address.png',
        url: '/pages/address/address'
      },
      {
        id: 2,
        title: '联系客服',
        icon: '/assets/images/icons/service.png',
        url: ''
      },
      {
        id: 3,
        title: '申请成为服务人员',
        icon: '/assets/images/icons/usertype.png',
        url: ''
      },
      {
        id: 4,
        title: '个人设置',
        icon: '/assets/images/icons/settings.png',
        url: '/pages/mine/settings/settings'
      },
      {
        id: 5,
        title: '关于我们',
        icon: '/assets/images/icons/about.png',
        url: '/pages/about/about'
      }
    ]
  },

  onLoad() {
    this.checkLoginStatus();
  },

  onShow() {
    // 每次页面显示时检查登录状态并更新用户信息
    this.checkLoginStatus();
    // 不要在这里调用updateMenuList，它会在checkLoginStatus成功后自动调用
  },

  // 检查登录状态
  checkLoginStatus() {
    // 判断是否已登录
    if (auth.isLoggedIn()) {
      // 获取当前登录用户信息
      this.getLoginUserInfo();
    } else {
      // 未登录状态
      this.setData({
        userInfo: null,
        hasUserInfo: false,
        userRole: ''
      });
      // 立即更新菜单，适应未登录状态
      this.updateMenuList();
    }
  },

  // 更新菜单列表，根据用户角色显示不同的菜单项
  updateMenuList() {
    const originMenuList = [
      {
        id: 1,
        title: '我的地址',
        icon: '/assets/images/icons/address.png',
        url: '/pages/address/address'
      },
      {
        id: 2,
        title: '联系客服',
        icon: '/assets/images/icons/service.png',
        url: ''
      },
      {
        id: 3,
        title: '申请成为服务人员',
        icon: '/assets/images/icons/usertype.png',
        url: ''
      },
      {
        id: 4,
        title: '个人设置',
        icon: '/assets/images/icons/settings.png',
        url: '/pages/mine/settings/settings'
      },
      {
        id: 5,
        title: '关于我们',
        icon: '/assets/images/icons/about.png',
        url: '/pages/about/about'
      }
    ];

    const isLoggedIn = this.data.hasUserInfo;
    const userRole = this.data.userRole;


    // 如果用户未登录，隐藏第三个菜单项
    if (!isLoggedIn) {
      const filteredMenu = originMenuList.filter(item => item.id !== 3);
      this.setData({ menuList: filteredMenu });
      return;
    }

    // 处理已登录用户的菜单
    let finalMenuList = [...originMenuList];

    // 如果是服务人员，修改第三个菜单为"服务人员后台"
    if (userRole === 'provider') {
      finalMenuList = originMenuList.map(item => {
        if (item.id === 3) {
          return {
            ...item,
            title: '服务人员后台',
            icon: '/assets/images/icons/usertype.png',
            url: '/pages/provider/dashboard/dashboard'
          };
        }
        return item;
      });
    } else {
      // 其他角色(包括普通用户)，显示申请成为服务人员
      // 保持原菜单不变
    }

    this.setData({ menuList: finalMenuList });
  },

  // 点击登录按钮
  goToLogin() {
    wx.navigateTo({
      url: '/pages/login/login'
    })
  },

  // 退出登录
  logout() {
    wx.showModal({
      title: '提示',
      content: '确定要退出登录吗？',
      success: (res) => {
        if (res.confirm) {
          // 清除登录信息
          auth.clearLoginInfo()

          // 更新页面状态
          this.setData({
            userInfo: null,
            hasUserInfo: false,
            userRole: ''
          })

          // 更新全局数据
          app.globalData.userInfo = null
          app.globalData.userRole = auth.USER_ROLES.USER
          app.globalData.token = ''

          // 提示退出成功
          wx.showToast({
            title: '已退出登录',
            icon: 'success'
          })
        }
      }
    })
  },

  // 获取当前登录用户信息
  getLoginUserInfo() {
    wx.showLoading({
      title: '加载中...',
      mask: true
    })

    // 调用获取登录用户信息接口
    get('/api/user/get/login').then(res => {
      wx.hideLoading()

      if (res.code === 0 && res.data) {
        // 更新用户信息
        const userInfo = {
          id: res.data.id,
          username: res.data.username,
          nickName: res.data.username, // 使用用户名作为昵称
          avatarUrl: res.data.avatar || '/assets/images/icons/default-avatar.png',
          phone: res.data.phone,
          email: res.data.email,
          openId: res.data.openId,
          createTime: res.data.createTime,
          updateTime: res.data.updateTime
        }

        // 设置用户角色
        const userRole = res.data.userRole
        auth.setUserRole(userRole)

        // 更新本地存储
        auth.setUserInfo(userInfo)

        // 更新页面数据
        this.setData({
          userInfo: userInfo,
          hasUserInfo: true,
          userRole: userRole
        })

        // 更新全局数据
        app.globalData.userInfo = userInfo
        app.globalData.userRole = userRole

        // 更新菜单列表
        this.updateMenuList()
      } else {
        // 获取用户信息失败
        this.handleLoginFailure('获取用户信息失败：' + (res.message || '未知错误'))
      }
    }).catch(err => {
      wx.hideLoading()
      this.handleLoginFailure('获取用户信息失败：' + (err.message || '网络错误'))
    })
  },

  // 处理登录失败
  handleLoginFailure(errorMsg) {
    console.error(errorMsg)

    // 清除登录信息
    auth.clearLoginInfo()

    // 更新页面状态为未登录
    this.setData({
      userInfo: null,
      hasUserInfo: false,
      userRole: ''
    })

    // 显示错误信息
    wx.showToast({
      title: errorMsg,
      icon: 'none'
    })
  },

  // 申请成为服务人员
  applyForProvider() {
    // 检查是否登录
    if (!this.data.hasUserInfo) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      })
      return
    }

    // 如果已经是服务人员，则跳转到服务人员后台
    if (this.data.userRole === 'provider') {
      wx.navigateTo({
        url: '/pages/provider/dashboard/dashboard'
      })
      return
    }

    // 检查用户头像和手机号是否为空
    const userInfo = this.data.userInfo;
    if (!userInfo.avatarUrl || userInfo.avatarUrl === '/assets/images/icons/default-avatar.png' || !userInfo.phone) {
      wx.showModal({
        title: '提示',
        content: '请先完善个人信息（头像和手机号）',
        confirmText: '去完善',
        cancelText: '取消',
        success: (res) => {
          if (res.confirm) {
            // 用户点击确定，跳转到个人设置页面
            wx.navigateTo({
              url: '/pages/mine/settings/settings'
            })
          }
        }
      })
      return
    }

    // 显示确认弹窗
    wx.showModal({
      title: '申请成为服务人员',
      content: '确定要申请成为服务人员吗？成为服务人员后可以接单提供服务。',
      confirmText: '确定申请',
      cancelText: '取消',
      success: (res) => {
        if (res.confirm) {
          // 用户点击确定，跳转到申请页面
          wx.navigateTo({
            url: '/pages/provider/apply/apply'
          })
        }
      }
    })
  },

  // 跳转菜单页面
  goToMenuPage(e) {
    const url = e.currentTarget.dataset.url
    const title = e.currentTarget.dataset.title


    if (title === '申请成为服务人员') {
      this.applyForProvider()
      return
    }

    if (url) {
      wx.navigateTo({
        url: url
      })
    } else {
      // 处理特殊菜单，例如联系客服
      if (title === '联系客服') {
        wx.makePhoneCall({
          phoneNumber: '400-123-4567'
        })
      }
    }
  }
}) 